import axios from 'axios'
import { getUser, getStore, clearStore, clearUser } from './store'
import { Message, Notification, Alert, } from 'element-ui'

//访问后台网关ip
let baseUrl = 'http://127.0.0.1:9999'

let http = axios.create({
    baseURL: baseUrl,
    timeout: 10000,
    // transformResponse (data) {
    //     if (data) { return BigInt.parse(data) } // 由于后端的数据库对id进行了变更 所以这里必须采用json-bigint插件来进行处理 保证数据正确
    //   }
});

//请求拦截器
http.interceptors.request.use(config => {
    // LoadingManage.openLoading(); //打开弹层
    // const Authorization = getUser()
    // if (Authorization && Authorization.token) {
    //   // 如果当前缓存中存在用户令牌 后台接口的参数格式
    //   config.headers['Content-Type'] = 'application/json'
    //   config.headers.token = Authorization.token
    // }
    // 让每个请求携带token-- ['X-Token']为自定义key
    const value = getStore('TOKEN');
    // if(value != null){
    config.headers['Token'] = value
    // }

    return config
},
    error => {
        Promise.reject(error)
    });

//响应拦截器
http.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    const code = response.data.code
    const msg = response.data.msg
    /*    if (code === 10021 || code === 10020) {
            sessionStorage.clear()
            window.location.href = '/login.html'
            return Promise.reject(new Error('无效的会话,或者会话已经过期，请重新登录。'))
        }*/
    if (code === 200) { 
        // Message({
        //     showClose: true,
        //     center: true,
        //     type: 'success',
        //     message: msg
        // });
        Notification({
            title: '通知',
            type: 'success',
            message: msg,
            offset: 100
        });
    } else if (code === 500 || code === 503 || code === 501 || code === 502) {
        Notification({
            title: '通知',
            type: 'error',
            message: msg + 'cccc',
            offset: 100
        });
        // return Promise.reject(new Error(msg))
        return new Promise(function () { }) // 终止当前的promise链

    } else if (code == 401) {
        Notification({
            title: '通知',
            type: 'warning',
            message: msg,
            offset: 100
        });
        clearStore('TOKEN');

    }
    else {
        Notification({
            title: '通知',
            type: 'warning',
            message: msg,
            offset: 100
        });
    }

    return response.data
}, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    let { message } = error
    if (message === 'Network Error') {
        message = '系统出问题了,请联系开发者修bug'
    } else if (message.includes('timeout')) {
        message = '请求超时请稍后再试'
    } else if (message.includes('Request failed with status code')) {
        if (message.substr(message.length - 3) === '401') {
            message = '身份验证失败,请重新登录'
            Notification({
                title: '警告',
                type: 'error',
                message: message,
                offset: 100
            });

            clearStore('TOKEN');
            clearUser();
            window.location.href = '/';
            return new Promise(function () { }) // 终止当前的promise链
        }

        message = '系统接口' + message.substr(message.length - 3) + '异常'
    }
    Notification({
        title: '警告',
        type: 'error',
        message: message,
        offset: 100
    });
    // ElMessage({
    //     message: message,
    //     type: 'error',
    //     duration: 5 * 1000
    // })
    return new Promise(function () { }) // 终止当前的promise链
});


export default http;